/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import oracle.jdbc.*;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.factories.*;

/**
 *
 * @author Gregorovichz Carlos Rossi
 * @date   31/03/2010
 */
public class PersonalPolicialDespachador {

//    Revisar este metodo ya que se duplica el mismo metodo en Persona Despachador
    public static List<PersonalPolicial> obtenerPersonalPolicial() throws SQLException {
        List<PersonalPolicial> lstPersonalPolicial = new ArrayList<PersonalPolicial>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_PERSONAL_POLICIAL(?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.registerOutParameter(1, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(1);
            while (rs.next()) {
                PersonalPolicial personalpolicial = new PersonalPolicial();
                personalpolicial.setNpersIdentificador(rs.getInt("NPERS_IDENTIFICADOR"));
                personalpolicial.setCpersApepaterno(rs.getString("CPERS_APEPATERNO"));
                personalpolicial.setCpersApematerno(rs.getString("CPERS_APEMATERNO"));
                personalpolicial.setCpersNombre(rs.getString("CPERS_NOMBRE"));
                personalpolicial.setNpepoIdentificador(rs.getInt("NPEPO_IDENTIFICADOR"));
                personalpolicial.setNpepoTiempoServicio(rs.getDouble("NPEPO_TIEMPOSERVICIO"));
                personalpolicial.setBpepoPerteneceCuadroMerito(rs.getBoolean("BPEPO_PERTENECECUADROMERITO"));
                personalpolicial.setDpepoFechaIngreso(rs.getDate("DPEPO_FECHAINGRESO"));
                personalpolicial.setDpepoFechaBaja(rs.getDate("DPEPO_FECHABAJA"));
                personalpolicial.setNgradIdentificador(rs.getInt("NGRAD_IDENTIFICADOR"));
                personalpolicial.setCgradDescripcion(rs.getString("CGRAD_DESCRIPCION"));
                personalpolicial.setNdepeIdentificador(rs.getInt("NDEPE_IDENTIFICADOR"));
                personalpolicial.setCdepeNombre(rs.getString("CDEPE_NOMBRE"));
                lstPersonalPolicial.add(personalpolicial);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstPersonalPolicial;
    }

        public static void agregarPersonalPolicial(PersonalPolicial personalPolicial) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_AGREGAR_PERSONAL_POLICIAL(?,?,?,?,?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, personalPolicial.getNpersIdentificador());
            cs.setDouble(2, personalPolicial.getNpepoTiempoServicio());
            cs.setInt(3, personalPolicial.isBpepoPerteneceCuadroMerito()? 1:0);
            cs.setInt(4, personalPolicial.getNgradIdentificador());
            cs.setInt(5, personalPolicial.getNdepeIdentificador());
            cs.setDate(6, personalPolicial.getDpepoFechaIngreso() == null ? null : new java.sql.Date(personalPolicial.getDpepoFechaIngreso().getTime()));
            cs.setDate(7, personalPolicial.getDpepoFechaBaja() == null ? null : new java.sql.Date(personalPolicial.getDpepoFechaBaja().getTime()));
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void modificarPersonalPolicial(PersonalPolicial personalPolicial) throws SQLException
    {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_MODIFICAR_PERSONAL_POLICIAL(?,?,?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setDouble(1, personalPolicial.getNpepoTiempoServicio());
            cs.setInt(2, personalPolicial.isBpepoPerteneceCuadroMerito()? 1:0);
            cs.setInt(3, personalPolicial.getNgradIdentificador());
            cs.setInt(4, personalPolicial.getNdepeIdentificador());
            cs.setInt(5, personalPolicial.getNpepoIdentificador());
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void eliminarPersonalPolicial(int npepoIdentificador) throws SQLException
    {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_ELIMINAR_PERSONAL_POLICIAL(?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, npepoIdentificador);
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }
}
